//+--------------------------------------------------------------------------------
//| Copyright (c) 2012 - 2013 ### an.vuongngocduy
//| This file is a part of Compact Game Engine (CGE)
//+--------------------------------------------------------------------------------
#ifndef __CGE_ENUMS_H__
#define __CGE_ENUMS_H__

namespace cge
{
	namespace io
	{
		struct FileOpenMode
		{
			enum Enum
			{
				OpenRead		=	0x0001,
				
				OpenWrite		=	0x0010,
				
				OpenReadWrite	=	0x0011,
				
				CreateWrite		=	0x0110,

				CreateReadWrite =	0x0111,
				
				Append			=	0x1111
			};
		};
		typedef FileOpenMode::Enum EFileOpenMode;
	}

	namespace gfx
	{
		//! Renderer's graphic driver
		struct RendererDriver
		{
			enum Enum
			{
				OpenGL			= 0
			};
		};
		typedef RendererDriver::Enum ERendererDriver;


		//! Pixel format
		struct PixelFormat
		{
			enum Enum
			{
				//! 16-bits represents 65536 shades of gray
				Bpp16_GreyScale				= 0,

				
				//! Default 16-bits color format . 5-bits for each red and blue , 6-bits for green
				Bpp16_R5G6B5				= 1,

				
				//! 16-bits color format . 5-bits is used for each red, green and blue , the remain 1-bit is for alpha 
				Bpp16_A1R5G5B5				= 2,

				
				//! 16-bits color format . 4-bits is used for each component : red, green, blue and alpha  
				Bpp16_A4R4G4B4				= 3,

				
				//! Default 24-bits color format . No alpha . 8-bits is used for each red, green and blue
				Bpp24_R8G8B8				= 4,

				
				//! Default 32-bits color format . 8-bits is used for each component : red, green, blue and alpha   
				Bpp32_A8R8G8B8				= 5,

				
				//! Reverse of PixelFormat::Bpp16_R5G6B5
				Bpp16_B5G6R5				= -1,

				
				//! Reverse of PixelFormat::Bpp16_A1R5G5B5
				Bpp16_B5G5R5A1				= -2,

				
				//! Reverse of PixelFormat::Bpp16_A4R4G4B4 
				Bpp16_B4G4R4A4				= -3,

				
				//! Reverse of PixelFormat::Bpp24_R8G8B8
				Bpp24_B8G8R8				= -4,

				
				//! Reverse of PixelFormat::Bpp32_A8R8G8B8   
				Bpp32_B8G8R8A8				= -5,

				
				//! Unidentified pixel format
				Unknown
			};
		};
		typedef PixelFormat::Enum EPixelFormat;


		//! Texture units
		struct TextureUnit
		{
			enum Enum
			{
				Texture0,
				Texture1,
				Texture2,
				Texture3,
				Texture4,
				Texture5,
				Texture6
			};
		};
		typedef TextureUnit::Enum ETextureUnit;


		//! Texture wrap mode
		struct TextureWrapMode
		{
			enum Enum
			{
				//! The last pixels of texture will be stretched out to infinity
				ClampMode,


				//! The whole texture will be repeated to infinity
				RepeatMode,


				//! The whole texture will be flipped horizontally / vertically and repeated  to infinity
				MirrorMode
			};
		};
		typedef TextureWrapMode::Enum ETextureWrapMode;
	}
}

#endif//__CGE_ENUMS_H__